﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
#if CONSOLE_CLIENT
using System.Diagnostics;
using Mathf = System.Math;
#else
using UnityEngine;
#endif


public class LogWrapper
{
    public enum ELogLevel
    {        
        DEBUG = 800,
        INFO = 700,
        WARNING = 500,
        ERROR = 400,
        KEYLOG = 390,
        PROFILE = 300,
        TIMEPRO = 296,
        ASSERTION = 200,
        NOLOG = 0,
        LOG_REPORT = -100,
    }
    public enum LogProfileType
    {
        E_LOGPROFILE_NO = 0,
        E_LOGPROFILE_LOADING = 1,
        E_LOGPROFILE_LEAVING = 2,
    }
    private static ELogLevel m_log_level = ELogLevel.DEBUG;
    static int m_mainThreadId = 0;
    static bool m_inUnityEditor = false;
    public static ELogLevel LogLevel
    {
        get { return m_log_level; }
        set { m_log_level = value; }
    }
    public static int mainThreadId
    {
        get { return m_mainThreadId; }
        set { m_mainThreadId = value; }
    }
    public static bool inUnityEditor
    {
        get { return m_inUnityEditor; }
        set { m_inUnityEditor = value; }
    }
    public static void SetLogLevel(String s)
    {
        if (s.ToUpper().Equals("DEBUG"))
        {
            LogLevel = ELogLevel.DEBUG;
        }
        else if (s.ToUpper().Equals("INFO"))
        {
            LogLevel = ELogLevel.INFO;
        }
        else if (s.ToUpper().Equals("WARNING"))
        {
            LogLevel = ELogLevel.WARNING;
        }
        else if (s.ToUpper().Equals("ERROR"))
        {
            LogLevel = ELogLevel.ERROR;
        }
        else if (s.ToUpper().Equals("PROFILE"))
        {
            LogLevel = ELogLevel.PROFILE;
        }
        else if (s.ToUpper().Equals("KEYLOG"))
        {
            LogLevel = ELogLevel.KEYLOG;
        }
        else if (s.ToUpper().Equals("TIMEPRO"))
        {
            LogLevel = ELogLevel.TIMEPRO;
        }
        else if (s.ToUpper().Equals("ASSERTION"))
        {
            LogLevel = ELogLevel.ASSERTION;
        }
        else if (s.ToUpper().Equals("NOLOG"))
        {
            LogLevel = ELogLevel.NOLOG;
        }
        else
        {
            LogPrivate(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, "Invalid LogLevel: " + s);
        }
    }

    #region Field
    const int MAX_LOG_ENTRY_NUM = 10;
    private static StreamWriter mStreamWriter = null;   // 文件
    private static bool mIsInit = false;                // 初始化标记，避免重复初始
    private static bool m_bIsLocalFileEnabled = true;   // 向本地文件写入日志的开关
    private static StringBuilder m_StringBuilder = new StringBuilder(2048, 2048);
    private static bool m_bIsUdpUploadEnabled = false;//是否开启udp上报
    #endregion

    #region Property
    public static string sm_log_prefix = ": H3D_dancer";

    /// <summary>
    /// LogWrapper开关
    /// </summary>


    /// <summary>
    /// 向本地文件写入日志的开关
    /// </summary>
    public static bool IsLocalFileEnabled
    {
        get { return m_bIsLocalFileEnabled; }
        set { m_bIsLocalFileEnabled = value; }
    }

    public static bool IsUdpUploadEnabled
    {
        get { return m_bIsUdpUploadEnabled; }
    }
    #endregion 
    public static void EnableUdpUploadLog(string address, string project_json)
    {
        m_bIsUdpUploadEnabled = true;
        LogUpload.Init(address, project_json);
    }

    private static void UdpUploadLog(string line)
    {
        if (!m_bIsUdpUploadEnabled) return;
        LogUpload.Upload(line);
    }
    static bool IsMainThread()
    {
        return Thread.CurrentThread.ManagedThreadId == mainThreadId;
    }
    static int GetFrameCount
    {
        get
        {
#if CONSOLE_CLIENT
            return 0;
#else
            if (IsMainThread())
            {
                return Time.frameCount;
            }
            else
            {
                return 0;
            }
#endif

        }


    }

    private static void WriteLogToFile(string line)
    {
        if (!m_bIsLocalFileEnabled) return;

        if (mStreamWriter != null)
        {
            lock (mStreamWriter)
            {
                mStreamWriter.WriteLine(line);
            }
        }
    }
    //[Conditional("USE_LOGWRAPPER_PROFILE")]
    //public static void LogProfileLoading(string str)
    //{
    //    if (m_log_level < ELogLevel.TIMEPRO)
    //    {
    //        return;
    //    }
    //    LogProfiler.LogProfileLoading(str);
    //    LogProf(str);
    //}

    //[Conditional("USE_LOGWRAPPER_PROFILE")]
    // public static void LogProfileLeaving(string str)
    // {
    //     if (m_log_level < ELogLevel.TIMEPRO)
    //     {
    //         return;
    //     }
    //     LogProfiler.LogProfileLeaving(str);
    //     LogProf(str);
    // }
    public static void Init(string path = "")
    {
        if (mIsInit)
            return;
        if (path == "")
            return;
#if CONSOLE_CLIENT
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
       
#else

#endif
        StringBuilder fileName = new StringBuilder(path);
        fileName.Append("/");
        fileName.AppendFormat("{0}_{1}_{2}_{3}_{4}_{5}_{6}",
            DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute,
            DateTime.Now.Second, "log.txt");

        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        LogProfiler.Init(fileName.ToString());
        FileStream fs = new FileStream(fileName.ToString(), FileMode.OpenOrCreate);
        mStreamWriter = new StreamWriter(fs);
        mStreamWriter.AutoFlush = true;
        mIsInit = true;

    }
    public static void Exception(Exception exp)
    {

        lock (m_StringBuilder)
        {
            try
            {
                Init();

                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0}{2} Exception - {1}", DateTime.Now.ToString(), exp.ToString(), sm_log_prefix);

#if CONSOLE_CLIENT
            Console.WriteLine(m_StringBuilder.ToString());
#else
                UnityEngine.Debug.LogException(exp);
#endif
                string info = m_StringBuilder.ToString();
                WriteLogToFile(info);
                UdpUploadLog(info);
            }
            catch (Exception)
            {

            }
        }
    }
    static void ExceptionImp(Exception exp)
    {
        lock (m_StringBuilder)
        {
            try
            {
                Init();

                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0}{2} Exception - {1}", DateTime.Now.ToString(), exp.ToString(), sm_log_prefix);

                string info = m_StringBuilder.ToString();
                WriteLogToFile(info);
                UdpUploadLog(info);
            }
            catch (Exception)
            {

            }
        }
    }
    private static void LogPrivate(ELogLevel level, LogProfileType logProfileType, string info)
    {
#if CONSOLE_CLIENT
        Console.WriteLine(info);
#else
        if (level == ELogLevel.ERROR)
        {
            if (m_inUnityEditor)
            {
                UnityEngine.Debug.LogError(info);
            }
            else
            {
                UnityEngine.Debug.Log(info);
            }

        }
        else if (level == ELogLevel.WARNING)
        {
            UnityEngine.Debug.LogWarning(info);
        }
        else if (level == ELogLevel.ASSERTION)
        {
            Exception ex = new Exception(info);
            UnityEngine.Debug.LogException(ex);
        }
        else
        {
            UnityEngine.Debug.Log(info);
        }

#endif


        if (LogProfileType.E_LOGPROFILE_LEAVING == logProfileType)
        {
            LogProfiler.LogProfileLeaving(m_StringBuilder.ToString());
        }
        else if (LogProfileType.E_LOGPROFILE_LOADING == logProfileType)
        {
            LogProfiler.LogProfileLoading(m_StringBuilder.ToString());
        }
        else
        {
            if (level == ELogLevel.LOG_REPORT)
            {
                UdpUploadLog(info);
            }
            else
            {
                WriteLogToFile(info);
            }
        
        }
    }

    static string GetLogLevelStr(ELogLevel logLevel)
    {
        switch (logLevel)
        {
            case ELogLevel.DEBUG:
                return "Debug";
            case ELogLevel.ERROR:
                return "Error";
            case ELogLevel.INFO:
                return "Info";
            case ELogLevel.KEYLOG:
                return "Key";
            case ELogLevel.PROFILE:
                return "Prof";
            case ELogLevel.TIMEPRO:
                return "TimePro";
            case ELogLevel.WARNING:
                return "Warning";
            case ELogLevel.ASSERTION:
                return "Assertion";
            default:
                return "";
        }
    }
    static StringBuilder AppendToStringBuilder(StringBuilder stringBuilder, object t)
    {
        if (t == null)
        {
            stringBuilder.Append("null");
        }
        else
        {
            stringBuilder.Append(t.ToString());
        }
        return stringBuilder;
    }
    static void LogImp<T1>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }


            try
            {
                Init();
                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));

                AppendToStringBuilder(m_StringBuilder, t1);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }


    static void LogImp<T1, T2>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();
                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2);
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }

        }
    }


    static void LogImp<T1, T2, T3>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }

            try
            {
                Init();



                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }


    static void LogImp<T1, T2, T3, T4>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }


    static void LogImp<T1, T2, T3, T4, T5>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }

    static void LogImp<T1, T2, T3, T4, T5, T6>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.MaxCapacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }

    static void LogImp<T1, T2, T3, T4, T5, T6, T7>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }

    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t16);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t16).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t17);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t16).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t17).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t18);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }

    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t16).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t17).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t18).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t19);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }
    static void LogImp<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        ELogLevel logLevel, LogProfileType logProfileType, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        lock (m_StringBuilder)
        {
            if (m_log_level < logLevel)
            {
                return;
            }
            try
            {
                Init();


                m_StringBuilder.Remove(0, Mathf.Min(m_StringBuilder.Length, m_StringBuilder.Capacity));
                m_StringBuilder.AppendFormat("{0} {1} {2} {3} - ", DateTime.Now.ToString(), GetFrameCount, sm_log_prefix, GetLogLevelStr(logLevel));
                AppendToStringBuilder(m_StringBuilder, t1).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t2).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t3).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t4).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t5).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t6).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t7).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t8).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t9).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t10).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t11).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t12).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t13).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t14).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t15).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t16).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t17).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t18).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t19).Append(" ");
                AppendToStringBuilder(m_StringBuilder, t20);

                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (ArgumentOutOfRangeException)
            {
                LogPrivate(logLevel, logProfileType, m_StringBuilder.ToString());
            }
            catch (Exception ex)
            {
                ExceptionImp(ex);
            }
        }
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1>(T1 t1)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogDebug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.DEBUG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1>(T1 t1)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogInfo<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.INFO, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1>(T1 t1)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogWarning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.WARNING, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1>(T1 t1)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogError<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.ERROR, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1>(T1 t1)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogProf<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1>(T1 t1)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogKey<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.KEYLOG, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }


    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1>(T1 t1)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLoading<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LOADING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1>(T1 t1)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER_PROFILE")]
    public static void LogProfileLeaving<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.PROFILE, LogProfileType.E_LOGPROFILE_LEAVING, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1>(T1 t1)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }

    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }
    [Conditional("USE_LOGWRAPPER")]
    public static void LogAssertion<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.ASSERTION, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }

    public static void LogReport<T1>(T1 t1)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1);
    }


    public static void LogReport<T1, T2>(T1 t1, T2 t2)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2);
    }


    public static void LogReport<T1, T2, T3>(T1 t1, T2 t2, T3 t3)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3);
    }


    public static void LogReport<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4);
    }


    public static void LogReport<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19);
    }

    public static void LogReport<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(
        T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10,
        T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20)
    {
        LogImp(ELogLevel.LOG_REPORT, LogProfileType.E_LOGPROFILE_NO, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20);
    }
}
